#ifndef __DRIVER_H_J2NGNKJNMXIUE83NSJAQJ__
#define __DRIVER_H_J2NGNKJNMXIUE83NSJAQJ__

#pragma warning(disable : 4005)

#include "comsup.h"
#include "wudfddi.h"

#pragma warning(default : 4005)

class Driver : public CUnknown, public IDriverEntry {
private:
    IDriverEntry *QueryIDriverEntry(VOID);

    HRESULT Initialize(VOID);

public:
    static HRESULT CreateInstance(__out Driver **aDriver);

public:
    virtual HRESULT STDMETHODCALLTYPE OnInitialize(__in IWDFDriver *FxWdfDriver);
    virtual HRESULT STDMETHODCALLTYPE OnDeviceAdd(__in IWDFDriver *FxWdfDriver, __in IWDFDeviceInitialize *FxDeviceInit);
    virtual VOID STDMETHODCALLTYPE OnDeinitialize(__in IWDFDriver *FxWdfDriver);
    virtual ULONG STDMETHODCALLTYPE AddRef(VOID);
    virtual ULONG STDMETHODCALLTYPE Release(VOID);
    virtual HRESULT STDMETHODCALLTYPE QueryInterface(__in REFIID InterfaceId, __out PVOID *Object);
};

#endif
